์ž‘์„ฑ: 2026-03-06 06:35:13์ˆ˜์ •: 2026-03-06 06:35:13

PostgreSQL 17์—์„œ 18๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€์ด๋“œ: ์ฃผ์š” ์ด์Šˆ ๋ฐ ํ•ด๊ฒฐ๋ฒ•

PostgreSQL์˜ ๋ฉ”์ด์ € ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋Š” ํ•ญ์ƒ ์„ค๋ ˆ๋Š” ์ผ์ด์ง€๋งŒ, ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ๋งˆ์ฃผํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” PostgreSQL 17์—์„œ 18๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ์˜ ํ‘œ์ค€ ์ ˆ์ฐจ์™€ ์ œ๊ฐ€ ์ง์ ‘ ๊ฒช์—ˆ๋˜ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

1. ์—…๊ทธ๋ ˆ์ด๋“œ ์ „ ์ค€๋น„์‚ฌํ•ญ

๋ฉ”์ด์ € ์—…๋ฐ์ดํŠธ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ฐฑ์—…: pg_dumpall์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ ๊ธฐ๋Šฅ(Extensions) ํ™•์ธ: PostGIS, TimescaleDB ๋“ฑ ์‚ฌ์šฉ ์ค‘์ธ ์ต์Šคํ…์…˜์ด PostgreSQL 18์„ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์šฉ๋Ÿ‰ ํ™•์ธ: pg_upgrade์˜ --link ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ํฌ๊ธฐ์˜ ์•ฝ 2๋ฐฐ ์ •๋„์˜ ์—ฌ์œ  ๊ณต๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ํ‘œ์ค€ ์—…๊ทธ๋ ˆ์ด๋“œ ์ ˆ์ฐจ (pg_upgrade)

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์€ pg_upgrade ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# 1. ์ด์ „ ๋ฒ„์ „๊ณผ ์ƒˆ ๋ฒ„์ „์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜ ํ™•์ธ
# 2. ์ƒˆ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ดˆ๊ธฐํ™” (initdb)
# 3. ์—…๊ทธ๋ ˆ์ด๋“œ ์ฒดํฌ (๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ๋จผ์ € ํ™•์ธ)
pg_upgrade \
  --old-datadir /var/lib/postgresql/17/main \
  --new-datadir /var/lib/postgresql/18/main \
  --old-bindir /usr/lib/postgresql/17/bin \
  --new-bindir /usr/lib/postgresql/18/bin \
  --check
 
# 4. ์‹ค์ œ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹คํ–‰ (--link ์˜ต์…˜์€ ํ•˜๋“œ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„)
pg_upgrade \
  --old-datadir /var/lib/postgresql/17/main \
  --new-datadir /var/lib/postgresql/18/main \
  --old-bindir /usr/lib/postgresql/17/bin \
  --new-bindir /usr/lib/postgresql/18/bin \
  --link

3. ๋งˆ์ฃผํ–ˆ๋˜ ์ฃผ์š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๋ฒ•

์—…๊ทธ๋ ˆ์ด๋“œ ๊ณผ์ •์—์„œ ์ œ๊ฐ€ ๊ฒช์—ˆ๋˜ ์ฃผ์š” ์ด์Šˆ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์Šˆ 1: ICU ๋กœ์ผ€์ผ ๋ถˆ์ผ์น˜ ์˜ค๋ฅ˜

PostgreSQL 17๋ถ€ํ„ฐ ICU ๋กœ์ผ€์ผ ์ง€์›์ด ๊ฐ•ํ™”๋˜์—ˆ๋Š”๋ฐ, 18๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ์‹œ์Šคํ…œ์˜ ICU ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ๋˜์–ด pg_upgrade ์ค‘ ์ธ๋ฑ์Šค ์ •๋ ฌ(Collation) ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ REINDEX DATABASE ๋˜๋Š” REINDEX INDEX๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • pg_upgrade ์‹œ --check ๊ฒฐ๊ณผ์—์„œ ๋กœ์ผ€์ผ ๊ด€๋ จ ๊ฒฝ๊ณ ๊ฐ€ ๋œฌ๋‹ค๋ฉด, ์ƒˆ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ๋กœ์ผ€์ผ ์„ค์ •์„ ๋ช…์‹œ์ ์œผ๋กœ ๋งž์ถฐ์ค๋‹ˆ๋‹ค.

์ด์Šˆ 2: ์ œ๊ฑฐ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ (postgresql.conf)

PostgreSQL 18์—์„œ๋Š” ๊ธฐ์กด์— deprecated๋˜์—ˆ๋˜ ์ผ๋ถ€ ์„ค์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • postgresql.conf์—์„œ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ถŒ์žฅ ์˜ต์…˜์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ์—…๊ทธ๋ ˆ์ด๋“œ ์ „ pg_upgrade๊ฐ€ postgresql.conf๋ฅผ ์ฝ์„ ๋•Œ ์—๋Ÿฌ๋ฅผ ๋‚ธ๋‹ค๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ๋’ค ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

์ด์Šˆ 3: pg_hba.conf ์ธ์ฆ ๋ฐฉ์‹ ๋ณ€๊ฒฝ

๋ณด์•ˆ ๊ฐ•ํ™”๋กœ ์ธํ•ด ์ด์ „์˜ ์ธ์ฆ ๋ฐฉ์‹(์˜ˆ: trust ๋˜๋Š” ์•„์ฃผ ์˜ค๋ž˜๋œ ์•”ํ˜ธํ™” ๋ฐฉ์‹)์ด ๊ฑฐ๋ถ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • pg_hba.conf์—์„œ scram-sha-256 ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

4. ์—…๊ทธ๋ ˆ์ด๋“œ ์™„๋ฃŒ ํ›„ ์ž‘์—…

  • ํ†ต๊ณ„ ์ •๋ณด ์—…๋ฐ์ดํŠธ: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ./analyze_new_cluster.sh๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ „ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ: ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์ •์ƒ ์ž‘๋™ํ•จ์„ ํ™•์ธํ•œ ํ›„ ./delete_old_cluster.sh๋ฅผ ์‹คํ–‰ํ•˜์—ฌ 17 ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์ด์ € ์—…๋ฐ์ดํŠธ๋Š” ๋ฒˆ๊ฑฐ๋กญ์ง€๋งŒ, PostgreSQL 18์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(์„ฑ๋Šฅ ๊ฐœ์„ , ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ผญ ํ•„์š”ํ•œ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์—๊ฒŒ ์ด ๊ธ€์ด ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.